package persistencia;

import java.util.Date;

import modelo.datos.utils.ListaClientes;
import modelo.datos.utils.ListaFacturas;
import modelo.entidades.Cliente;
import modelo.entidades.Direccion;
import modelo.entidades.Factura;
import modelo.entidades.Periodo;
import modelo.entidades.Persona;
import modelo.entidades.Cliente.TipoTarifa;
import modelo.entidades.Direccion.TipoVia;

public interface BaseDatos {
    Cliente CLIENTE_NULL = new Persona();
    Factura FACTURA_NULL = new Factura();
    BaseDatos DATOS = new BaseDatosImpl();

    void nuevaEmpresa(String nombre, String nif, Direccion direccion,
	    TipoTarifa tarifa);

    void nuevaPersona(String nombre, String apellidos, String nif,
	    Direccion direccion, TipoTarifa tarifa);

    void nuevaFactura(String nif, int metros, TipoTarifa tarifa,
	    Date fechaEmision, Periodo periodo);

    Direccion nuevaDireccion(TipoVia tipovia, String nombre, int codigoPostal,
	    String patio, String piso, String puerta);

    boolean actualizaCliente(Cliente cliente);

    boolean borraCliente(String nif);

    boolean actualizaFactura(Factura factura);

    boolean borraFactura(int codigo);

    Cliente getCliente(String nif);

    Factura getFactura(int codigo);

    ListaClientes getClientes();

    ListaFacturas getFacturasCliente(String nif);

    ListaFacturas getFacturasClienteEntreFechas(String nif, Date desde,
	    Date hasta);

}
